Delegates gebruiken
Home

Delegates gebruiken

Delegates gebruiken

We maken een klasse met de naam WerkenMetDelegates, waarin we alle voorbeelden voor het leren werken met delegates, zullen plaatsen.

Maak een WerkenMetDelegates klasse in de CSharpLerenViaConsole namespace.

namespace CSharpLerenViaConsole
{
    class WerkenMetDelegates
    {
        public delegate string IntToStringVertegenwoordiger();
    }
}


En roep die op in de Main methode van de Program klasse zoals je dat met elke andere klasse zou doen:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpLerenViaConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            DelegatesGebruiken();
            Console.ReadKey();
        }
        static void DelegatesGebruiken()
        {
            int x = 1021;
            WerkenMetDelegates.IntToStringVertegenwoordiger xToString =
                new WerkenMetDelegates.IntToStringVertegenwoordiger(x.ToString);
            Console.WriteLine("x to string: {0}", xToString());
        }
    }
}

Deze code instantieert een delegate van het type IntToStringVertegenwoordiger en ïnitialiseert de delegate variable met een verwijzing naar de ToString methode van
de integer variabele x.

In C# aanvaarden delegates altijd een ​​één-parameter-constructor.De parameter is dan de methode waarnaar de delegate verwijst. Deze methode moet overeekomen met de handtekening waarmee je de oorspronkelijk delegate gedefiniëerd hebt. Doe je dat met een methode met een andere handtekening krijg je een compilatie fout. Vermits int.ToString een instantie methode en geen static methode is, moet je zowel de instantie (x) als de naam van de methode opgeven om de delegate te initialiseren.

Ronde haakjes toevoegen aan de delegate instantie is hetzelfde als het aanroepen van de Invoke methode van de delegate klasse. Omdat xToString een variabele van een type delegate is, vervangt de C# compiler xToString door xToString.Invoke():

Console.WriteLine("x to string: {0}", xToString.Invoke());

Je kan ook gewoon de naam van het adres doorgeven i.p.v. van eerst een delegate instantie te maken:

WerkenMetDelegates.IntToStringVertegenwoordiger xToString = x.ToString;
Console.WriteLine("x to string met adres: {0}", xToString.Invoke());

Dit is bekend onder de naam delegate inference. Deze C # functie werkt zo lang als de compiler een delegate instantie kan terug brengen naar een bepaalde type.

JI
2016-11-23 13:31:05